home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
HAM Radio 1997
/
HAM Radio 1997.iso
/
vcls
/
wsanet8a
/
wsanet
/
src
/
ini.c
< prev
next >
Wrap
C/C++ Source or Header
|
1996-04-08
|
14KB
|
566 lines
/* Ini.C - Ini Control */
#define INI_C
#include "WSANet.H"
#include "Ini.H"
#ifdef DEBUG_BUILD
static char szErrors[256];
VOID DEBUGINI(LPSTR lpString)
{
wsprintf((LPSTR)szErrors, (LPSTR)"Ini: %s\n\r", lpString);
OutputDebugString( (LPSTR)szErrors );
}
#else
#define DEBUGINI( parm )
#endif /* DEBUG_BUILD */
// Static variables (to save the poor application's stack)
// Only used when you Get or Set Value
static char szSection[MAX_SECTION_SIZE];
static char szEntry[MAX_ENTRY_SIZE];
static char szDefault[MAX_DEFAULT_SIZE];
static char szFilename[MAX_FILENAME_SIZE];
static char szValue[MAX_VALUE_SIZE];
/* LONG CALLBACK _export IniCtlProc(HCTL, HWND, UINT, WPARAM, LPARAM);
Purpose: To handle the VBX messages
*/
LONG CALLBACK _export IniCtlProc(HCTL hCtl, HWND hWnd, UINT Msg,
WPARAM wParam, LPARAM lParam)
{
LPINI lpIni;
lpIni=(LPINI)VBDerefControl(hCtl);
switch(Msg)
{
#ifdef DESIGN_TIME
// The MODEL want's to know our default size
case VBM_GETDEFSIZE:
{
BITMAP bmp;
HBITMAP hBitmap;
DEBUGINI("VBM_GETDEFSIZE[2.0] Begin\n\r");
hBitmap=LoadBitmap(hModDLL, MAKEINTRESOURCE(IDBMP_INI));
if(hBitmap)
{
GetObject(hBitmap, sizeof(BITMAP), (LPSTR)&bmp);
DeleteObject(hBitmap);
DEBUGINI((LPSTR)"VBM_GETDEFSIZE[2.0] End\n\r");
return(MAKELONG(bmp.bmWidth, bmp.bmHeight));
}
DEBUGINI((LPSTR)"VBM_GETDEFSIZE[2.0] Allowing DefVBProc to handle\n\r");
}
break;
// The re-size message - only in design time
case WM_SIZE:
{
BITMAP bmp;
HBITMAP hBitmap;
RECT rect;
POINT pos;
DEBUGINI((LPSTR)"WM_SIZE Start");
GetWindowRect(hWnd, (RECT FAR *)&rect);
pos.x=rect.left;
pos.y=rect.top;
ScreenToClient((HWND)GetWindowWord(hWnd, GWW_HWNDPARENT),
(POINT FAR *)&pos);
hBitmap=LoadBitmap(hModDLL, MAKEINTRESOURCE(IDBMP_INI));
if(hBitmap)
{
GetObject(hBitmap, sizeof(BITMAP), (LPSTR)&bmp);
MoveWindow(hWnd, pos.x, pos.y, bmp.bmWidth, bmp.bmHeight,
SWP_NOZORDER | SWP_NOMOVE);
DeleteObject(hBitmap);
DEBUGINI((LPSTR)"WM_SIZE End");
return(0);
}
DEBUGINI((LPSTR)"WM_SIZE End - Bitmap load failure!");
}
break;
// The paint message - only design time!
case WM_PAINT:
{
PAINTSTRUCT ps;
BITMAP bmp;
RECT rect;
HBITMAP hBitmap,
hOldBitmap;
HDC hdcMem;
DEBUGINI((LPSTR)"WM_PAINT Start");
if(VBGetMode()==MODE_RUN) break;
GetWindowRect(hWnd, (RECT FAR *)&rect);
BeginPaint(hWnd, (PAINTSTRUCT FAR *)&ps);
hBitmap=LoadBitmap(hModDLL, MAKEINTRESOURCE(IDBMP_INI));
if(hBitmap)
{
GetObject(hBitmap, sizeof(BITMAP), (LPSTR)&bmp);
hdcMem = CreateCompatibleDC(ps.hdc);
if(hdcMem)
{
hOldBitmap=SelectObject(hdcMem, hBitmap);
BitBlt(ps.hdc, 0, 0, bmp.bmWidth, bmp.bmHeight, hdcMem,
0, 0, SRCCOPY);
SelectObject(hdcMem, hOldBitmap);
DeleteDC(hdcMem);
}
DeleteObject(hBitmap);
}
EndPaint(hWnd, (PAINTSTRUCT FAR *)&ps);
DEBUGINI((LPSTR)"WM_PAINT End");
}
break;
#endif // DESIGN_TIME
// The control is closing - free everything.
case WM_NCDESTROY:
{
MOLE mTemp;
DEBUGINI((LPSTR)"WM_NCDESTROY Begin");
if(lpIni->mSection)
{
mTemp = lpIni->mSection;
DeleteMole(mTemp);
lpIni=(LPINI)VBDerefControl(hCtl);
lpIni->mSection = 0;
}
if(lpIni->mEntry)
{
mTemp = lpIni->mEntry;
DeleteMole(mTemp);
lpIni=(LPINI)VBDerefControl(hCtl);
lpIni->mEntry = 0;
}
if(lpIni->mDefault)
{
mTemp = lpIni->mDefault;
DeleteMole(mTemp);
lpIni=(LPINI)VBDerefControl(hCtl);
lpIni->mDefault = 0;
}
if(lpIni->mFilename)
{
mTemp = lpIni->mFilename;
DeleteMole(mTemp);
lpIni=(LPINI)VBDerefControl(hCtl);
lpIni->mFilename = 0;
}
DEBUGINI((LPSTR)"WM_NCDESTROY End");
}
break; // WM_NCDESTROY
case VBM_CREATED:
{
DEBUGINI((LPSTR)"VBM_CREATED Begin");
lpIni->mSection = 0;
lpIni->mEntry = 0;
lpIni->mDefault = 0;
lpIni->mFilename = 0;
if(VBGetMode()==MODE_RUN)
{
ShowWindow(hWnd, SW_HIDE);
}
else
{
ShowWindow(hWnd, SW_SHOWNA);
}
DEBUGINI((LPSTR)"VBM_CREATED End");
return(ERR_None);
} // VBM_CREATED
/**********************************************************************
*** SET PROPERTY ***
**********************************************************************/
case VBM_SETPROPERTY:
{
ERR err;
#ifdef DEBUG_BUILD
char szError[128];
wsprintf((LPSTR)szError, (LPSTR)"VBM_SETPROPERTY: #%d - Begin",
wParam);
DEBUGINI((LPSTR)szError);
#endif /* DEBUG_BUILD */
switch(wParam)
{
/****************** SET: Section ********************/
// User is setting the [Section] string
case IPROP_INI_SECTION:
{
MOLE mTemp;
DEBUGINI((LPSTR)"SET: Section - Begin");
mTemp = lpIni->mSection;
SetMole((LPMOLE)&(mTemp), (LPSTR)lParam);
lpIni=(LPINI)VBDerefControl(hCtl);
lpIni->mSection = mTemp;
DEBUGINI((LPSTR)"SET: Section - End");
return(ERR_None);
} // IPROP_INI_SECTION
/****************** SET: Entry **********************/
// User is setting the Entry= string
case IPROP_INI_ENTRY:
{
MOLE mTemp;
DEBUGINI((LPSTR)"SET: Entry - Begin");
mTemp = lpIni->mEntry;
SetMole((LPMOLE)&(mTemp), (LPSTR)lParam);
lpIni=(LPINI)VBDerefControl(hCtl);
lpIni->mEntry = mTemp;
DEBUGINI((LPSTR)"SET: Entry - End");
return(ERR_None);
} // IPROP_INI_ENTRY
/****************** SET: Default ********************/
// User is setting the Default string
case IPROP_INI_DEFAULT:
{
MOLE mTemp;
DEBUGINI((LPSTR)"SET: Default - Begin");
mTemp = lpIni->mDefault;
SetMole((LPMOLE)&(mTemp), (LPSTR)lParam);
lpIni=(LPINI)VBDerefControl(hCtl);
lpIni->mDefault = mTemp;
DEBUGINI((LPSTR)"SET: Default - End");
return(ERR_None);
} // IPROP_INI_DEFAULT
/****************** SET: Filename *******************/
// User is setting the Filename string
case IPROP_INI_FILENAME:
{
MOLE mTemp;
DEBUGINI((LPSTR)"SET: Filename - Begin");
mTemp = lpIni->mFilename;
SetMole((LPMOLE)&(mTemp), (LPSTR)lParam);
lpIni=(LPINI)VBDerefControl(hCtl);
lpIni->mFilename = mTemp;
DEBUGINI((LPSTR)"SET: Filename - End");
return(ERR_None);
} // IPROP_INI_FILENAME
/****************** SET: Value **********************/
// User is setting the Value string
case IPROP_INI_VALUE:
{
LPSTR lpValue;
DEBUGINI((LPSTR)"SET: Value - Begin");
iniRebuildStrings(hCtl, lpIni);
lpValue = (LPSTR)lParam;
if(!WritePrivateProfileString((LPSTR)szSection, (LPSTR)szEntry,
(LPSTR)lpValue, (LPSTR)szFilename))
{
DEBUGINI((LPSTR)"SET: Value - End - WritePrivateProfileString() returned FALSE!!");
return(ERR_None);
}
DEBUGINI((LPSTR)"SET: Value - End");
return(ERR_None);
} // IPROP_INI_VALUE
default:
{
DEBUGINI((LPSTR)"VBM_SETPROPERTY Allowing default actions");
}
} // switch(wParam)
} // VBM_SETPROPERTY
/**********************************************************************
*** GET PROPERTY ***
**********************************************************************/
case VBM_GETPROPERTY:
{
#ifdef DEBUG_BUILD
char szError[128];
wsprintf((LPSTR)szError, (LPSTR)"VBM_GETPROPERTY: #%d: Begin",
wParam);
DEBUGINI((LPSTR)szError);
#endif /* DEBUG_BUILD */
switch(wParam)
{
/****************** GET: Section ********************/
// Get Section property
case IPROP_INI_SECTION:
{
HSZ hszTemp;
DEBUGINI((LPSTR)"GET: Section - Start");
if(!lParam) return(ERR_OUTOFMEMORY);
hszTemp = GetMoleHsz(hCtl, lpIni->mSection);
if(!hszTemp) return(ERR_OUTOFMEMORY);
*(*(LPHSZ *)&lParam) = hszTemp;
DEBUGINI((LPSTR)"GET: Section - End");
return(ERR_None);
} // IPROP_INI_SECTION
/****************** GET: Entry **********************/
// Get Entry property
case IPROP_INI_ENTRY:
{
HSZ hszTemp;
DEBUGINI((LPSTR)"GET: Entry - Start");
if(!lParam) return(ERR_OUTOFMEMORY);
hszTemp = GetMoleHsz(hCtl, lpIni->mEntry);
if(!hszTemp) return(ERR_OUTOFMEMORY);
*(*(LPHSZ *)&lParam) = hszTemp;
DEBUGINI((LPSTR)"GET: Entry - End");
return(ERR_None);
} // IPROP_INI_ENTRY
/****************** GET: Default ********************/
// Get Default property
case IPROP_INI_DEFAULT:
{
HSZ hszTemp;
DEBUGINI((LPSTR)"GET: Default - Start");
if(!lParam) return(ERR_OUTOFMEMORY);
hszTemp = GetMoleHsz(hCtl, lpIni->mDefault);
if(!hszTemp) return(ERR_OUTOFMEMORY);
*(*(LPHSZ *)&lParam) = hszTemp;
DEBUGINI((LPSTR)"GET: Default - End");
return(ERR_None);
} // IPROP_INI_DEFAULT
/****************** GET: Filename *******************/
// Get Filename property
case IPROP_INI_FILENAME:
{
HSZ hszTemp;
DEBUGINI((LPSTR)"GET: Filename - Start");
if(!lParam) return(ERR_OUTOFMEMORY);
hszTemp = GetMoleHsz(hCtl, lpIni->mFilename);
if(!hszTemp) return(ERR_OUTOFMEMORY);
*(*(LPHSZ *)&lParam) = hszTemp;
DEBUGINI((LPSTR)"GET: Filename - End");
return(ERR_None);
} // IPROP_INI_FILENAME
/****************** GET: Value **********************/
// Get Value from .INI file
case IPROP_INI_VALUE:
{
HSZ hszTemp;
DEBUGINI((LPSTR)"GET: Value - Start");
if(!lParam) return(ERR_OUTOFMEMORY);
iniRebuildStrings(hCtl, lpIni);
if(!GetPrivateProfileString((LPSTR)szSection, (LPSTR)szEntry,
(LPSTR)szDefault, (LPSTR)szValue,
sizeof(szValue), (LPSTR)szFilename))
{
DEBUGINI((LPSTR)"GET: Value - End - GetPrivateProfileString() returned 0!");
hszTemp = GetMoleHsz(hCtl, 0);
}
else
{
hszTemp = VBCreateHsz((_segment)hCtl, (LPSTR)szValue);
}
if(!hszTemp) return(ERR_OUTOFMEMORY);
*(*(LPHSZ *)&lParam) = hszTemp;
DEBUGINI((LPSTR)"GET: Value - End");
return(ERR_None);
} // IPROP_INI_VALUE
default:
{
DEBUGINI((LPSTR)"VBM_GETPROPERTY Allowing default actions");
}
} // switch(wParam)
} // VBM_GETPROPERTY
break;
#ifdef DESIGN_TIME
/**********************************************************************
*** CONTEXT SENSITIVE HELP ***
**********************************************************************/
case VBM_HELP:
{
DEBUGINI((LPSTR)"VBM_HELP: Begin");
if(bHelpStdPropEvt(wParam, (LPMODEL)lParam))
break;
else return(DisplayHelpTopic(TOPIC_CONTROL_INI, wParam,
(LPMODEL)lParam));
DEBUGINI((LPSTR)"VBM_HELP: Standard handler allowed");
}
break;
#endif // DESIGN_TIME
/**********************************************************************
*** METHOD SUPPORT ***
**********************************************************************/
case VBM_METHOD:
{
DEBUGINI((LPSTR)"VBM_METHOD: Begin");
switch(wParam)
{
/****************** METHOD: AddItem *****************/
// Add an item to List
case METH_ADDITEM:
{
DEBUGINI((LPSTR)"METHOD: AddItem - Begin");
DEBUGINI((LPSTR)"METHOD: AddItem - End");
}
break; /* METH_ADDITEM */
/****************** METHOD: RemoveItem **************/
// Remove an item from the list
case METH_REMOVEITEM:
{
DEBUGINI((LPSTR)"METHOD: RemoveItem - Begin");
DEBUGINI((LPSTR)"METHOD: RemoveItem - End");
}
break; /* METH_REMOVEITEM */
/****************** METHOD: Clear *******************/
// Clear a [Section] or a group of entries=
case METH_CLEAR:
{
DEBUGINI((LPSTR)"METHOD: Clear - Begin");
DEBUGINI((LPSTR)"METHOD: Clear - End");
}
break; /* METH_CLEAR */
}
DEBUGINI((LPSTR)"VBM_METHOD: End - Default method used");
}
break;
} // switch(Msg)
return(VBDefControlProc(hCtl, hWnd, (USHORT)Msg, (USHORT)wParam,
(LONG)lParam));
} /* IniCtlProc() */
/* VOID iniRebuildStrings(HCTL, LPINI);
Purpose: To setup the static strings for usage
*/
VOID iniRebuildStrings(HCTL hCtl, LPINI lpIni)
{
MOLE mTemp;
DEBUGINI((LPSTR)"iniRebuildStrings() - Begin");
*szSection = '\0';
*szEntry = '\0';
*szDefault = '\0';
*szValue = '\0';
lstrcpy((LPSTR)szFilename, (LPSTR)DEFAULT_FILENAME);
if(!lpIni) return;
if(lpIni->mSection)
{
mTemp = lpIni->mSection;
GetMoleName(mTemp, (LPSTR)szSection, sizeof(szSection));
lpIni=(LPINI)VBDerefControl(hCtl);
}
if(lpIni->mEntry)
{
mTemp = lpIni->mEntry;
GetMoleName(mTemp, (LPSTR)szEntry, sizeof(szEntry));
lpIni=(LPINI)VBDerefControl(hCtl);
}
if(lpIni->mDefault)
{
mTemp = lpIni->mDefault;
GetMoleName(mTemp, (LPSTR)szDefault, sizeof(szDefault));
lpIni=(LPINI)VBDerefControl(hCtl);
}
if(lpIni->mFilename)
{
mTemp = lpIni->mFilename;
GetMoleName(mTemp, (LPSTR)szFilename, sizeof(szFilename));
lpIni=(LPINI)VBDerefControl(hCtl);
}
DEBUGINI((LPSTR)"iniRebuildStrings() - End");
return;
} /* iniRebuildStrings() */
/* End of Ini.C */